<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // ES6 提供了新的数据结构 Set。它类似于数组，但是成员的值都是唯一的，没有重复的值。
    // ------------------------1. 基本使用----------------------
    // let s = new Set();
    // // 得到一个空的Set对象
    // // 调用add方法，向s中添加几个值
    // s.add(3);
    // s.add(7);
    // s.add(9);
    // s.add(7); // Set对象中的成员都是唯一的，前面添加过7了，所以这里添加无效

    // console.log(s.size); //3
    // console.log(s); // {3, 7, 9}

    // ------------------------2. Set 的成员-----------------------
    // - size：属性，获取 set 中成员的个数，相当于数组中的 length
    // - add(value) ：添加某个值，返回 Set 结构本身。
    // - delete (value) ：删除某个值，返回一个布尔值，表示删除是否成功。
    // - has(value) ：返回一个布尔值，表示该值是否为Set的成员。
    // - clear() ：清除所有成员，没有返回值。
    // 将一些重复的值加入到Set对象中，看看效果
    const s = new Set();
    // 使用forEach遍历前面的数组，然后将数组中的每个值都通过Set对象的add方法添加到Set对象中
    [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
    // s = {2, 3, 5, 4}
    // 遍历Set对象，发现重复的值只有一份
    // for...in  循环中的 i 表示数组的下标，或对象的属性名
    // for...of  循环中的 i 表示数组的值，或对象的值
    for (let i of s) {
      console.log(i);// 2 3 5 4
    }



    // ------------------数组去重-----------------------------
    var arr = [1, 2, 1, 6, 1, 5, 6];
    var test = new Set(arr);
    console.log([...test]);  //(4) [1, 2, 6, 5]


  </script>
</body>

</html>